///**
// * Copyright &copy; 2012-2013 <a href="https://github.com/jims/mpa">mpa</a> All rights reserved.
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// */
//package com.jims.master.common.utils;
//
//
//import com.itextpdf.text.*;
//import com.itextpdf.text.pdf.*;
//import com.itextpdf.tool.xml.XMLWorkerHelper;
//import org.jsoup.Jsoup;
//
//import javax.servlet.http.HttpServletRequest;
//import java.io.*;
//import java.nio.charset.Charset;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.UUID;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
///**
// * @author Tian Ran
// * @desc 打印工具类.
// * @date 2015-12-9
// */
//public class PrintUtils {
//
//    /**
//     * 黑体
//     * */
//    private static final String FONT_SIMHEI = "simhei.ttf";
//    /**
//     * 宋体
//     */
//    private static final String FONT_SIMSUN = "simsun.ttf";
//
//
//    /**
//     * 页眉模式
//     * HEADER_MODE_NONE:不添加页眉
//     * HEADER_MODE_NORMAL:患者姓名(左)-文档类型(中)-住院号/门诊号(右)
//     * HEADER_MODE_FULL
//     */
//    public static final int HEADER_MODE_NONE = 0;
//    public static final int HEADER_MODE_NORMAL = 1;
////    public static final int HEADER_MODE_FULL = 2;
//
//    /**
//     * 页脚模式
//     * FOOTER_MODE_NONE:不添加页脚
//     * FOOTER_MODE_NORMAL:第x页(居中显示)
//     * FOOTER_MODE_FULL:第x页,共y页(居中显示)
//     */
//    public static final int FOOTER_MODE_NONE = 0;
//    public static final int FOOTER_MODE_NORMAL = 1;
//    public static final int FOOTER_MODE_FULL = 2;
//
//    /**
//     * 获取打印文件存放根路径
//     *
//     * @return
//     */
//    public static String getPrintBasePath(HttpServletRequest request) {
//        PropertiesLoader loader = new PropertiesLoader("jims.properties");
//        String path =request.getSession().getServletContext().getRealPath("/")+ loader.getProperty("printPdfPath");
//        return path;
//    }
//
//    /**
//     * 获取打印所需字体路径
//     *
//     * @return
//     */
//    public static String getPrintFontPath(HttpServletRequest request) {
//        PropertiesLoader loader = new PropertiesLoader("jims.properties");
//        String path =request.getSession().getServletContext().getRealPath("/")+ loader.getProperty("printFontPath");
//        return path;
//    }
//
//    /**
//     * 获取生成的打印文件(pdf)路径
//     *
//     * @param zhixingId
//     * @param docType
//     * @return
//     */
//    public static String getGenerateFilePath(HttpServletRequest request,String userId, String zhixingId, String docType, String docNum) {
//      String printBasePath = getPrintBasePath(request);                              //获取打印文件根路径
//       // String printBasePath = request.getSession().getServletContext().getRealPath("/") + "static" + File.separator + "emr"+  File.separator+"print";
//        File baseDir = new File(printBasePath);
//        if (!baseDir.exists()) {
//            baseDir.mkdir();
//        }
//
//        // 根据userId创建目录
//        String userPrintPath = printBasePath + File.separator + userId;
//        File userDir = new File(userPrintPath);
//        if (!userDir.exists()) {
//            userDir.mkdir();
//        }
//
//        // 根据zhixingId创建目录
//        String patientPrintPath = userPrintPath + File.separator + zhixingId;
//        File patientDir = new File(patientPrintPath);
//        if (!patientDir.exists()) {
//            patientDir.mkdir();
//        }
//
////        String fileName = docType + EmrDateUtils.getDate(EmrDateUtils.DATE_FORMAT_DATE_TIME_4) + ".pdf";           //文件名
//        String fileName = null;
//        if (docNum == null) {
//            fileName = docType+ UUID.randomUUID()+ ".pdf";    //文件名
//        } else {
//            fileName = docType +UUID.randomUUID()+docNum + ".pdf";
//        }
//
//        String generateFilePath = patientPrintPath + File.separator + fileName;     //最终生成打印文件路径
//        return generateFilePath;
//    }
//
//    /**
//     * 删除文件
//     * @param oldPath
//     */
//    public static void deleteFile(File oldPath) {
//        if (oldPath.isDirectory()) {
//            System.out.println(oldPath + "是文件夹--");
//            File[] files = oldPath.listFiles();
//            for (File file : files) {
//                deleteFile(file);
//            }
//        }else{
//            oldPath.delete();
//        }
//    }
//
//    /**
//     * 导出pdf文件
//     *
//     * @param url
//     * @param headerMode
//     * @param footerMode
//     * @param docType
//     * @param docNum
//     * @param patientName
//
//     * @param sex
//     * @return
//     */
//    public static String exportPdf(HttpServletRequest request,String userId, String url, int headerMode, int footerMode, String docType, String docNum, String patientName, String sex, String age, String deptName, String zhuyuanId, String bingc) {
//        String generateFilePath = getGenerateFilePath(request,userId, zhuyuanId, docType, docNum);       //pdf生成路径(添加页眉页脚后)
//        String tempFilePath = generateFilePath.substring(0, generateFilePath.lastIndexOf(".")) + "_temp.pdf";   //pdf生成路径(添加页眉页脚前)                     //临时文件(从url导出，未添加页眉页脚)
//        String folderPath = generateFilePath.substring(0,generateFilePath.lastIndexOf("\\")+1);
//        File generateFile= new File(folderPath);
//        deleteFile(generateFile);
//        PdfWriter writer = null;
//        InputStream inputStream = null;
//
//        // step 1 创建document
//        Document document = new Document(PageSize.A4, 60, 50, 50, 50);
//
//
//        try {
//            // step 2 获取PdfWriter
//            writer = PdfWriter.getInstance(document,
//                    new FileOutputStream(tempFilePath));
//            // step 3 打开document
//            document.open();
//
//            // step 4 通过Jsoup解析html(目的是修复html标签不匹配等错误)
//            org.jsoup.nodes.Document doc = Jsoup.connect(url).timeout(20000000).get();
//            // 临时处理"Invalid nested tag head found, expected closing tag meta."错误
//            doc.select("meta").remove();
//            doc.select("link").remove();
//            String htmlContent = doc.html().toString();
//            Pattern p = Pattern.compile("<img[^>]*");
//            StringBuffer sb = new StringBuffer();
//            sb.append(htmlContent);
//            Matcher m = p.matcher(htmlContent);
//            int index =0;
//            while(m.find()){
//                int r =m.end();
//                sb.insert(r+index,"/");
//                index++;
//            }
//            htmlContent = sb.toString();
//            // 修复br标签未关闭问题
//            htmlContent = htmlContent.replace("<br>", "<br/>");
//            // step 5 解析后的html字符串转化成inputstream
//            inputStream = new ByteArrayInputStream(
//                    htmlContent.getBytes("utf-8"));
//            // step 6 html转化成PDF
//            XMLWorkerHelper xmlWorkerHelper = XMLWorkerHelper.getInstance();
//            xmlWorkerHelper.getInstance().parseXHtml(writer, document, inputStream,
//                    Charset.forName("UTF-8"));
//        } catch (DocumentException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        // step 7 关闭document
//        document.close();
//
//        // step 8
//        if (headerMode == HEADER_MODE_NONE && footerMode == FOOTER_MODE_NONE) {
//            // 无页眉页脚模式 直接将xxx_temp.pdf重命名为xxx.pdf
//            File fOld = new File(tempFilePath);
//            File fNew = new File(generateFilePath);
//            if (fNew.exists()) {
//                System.out.print("dfsssssssss");
//                fNew.delete();
//            }
//            fOld.renameTo(fNew);
//        } else {
//            // 否则创建页眉页脚
//            createHeaderFooter(request,tempFilePath, generateFilePath, headerMode, footerMode, patientName,sex, age,deptName,zhuyuanId,bingc);
//        }
//
//        return generateFilePath;
//    }
//
//    /**
//     * 创建页眉页脚
//     * @param request
//     * @param srcPath
//     * @param destPath
//     * @param headerMode
//     * @param footerMode
//     * @param patientName
//     * @param age
//     * @param deptName
//     * @param zhuyuanId
//     * @param chuangh
//     * @param sex
//     */
//    public static void createHeaderFooter(HttpServletRequest request,String srcPath, String destPath, int headerMode, int footerMode,  String patientName,String sex,String  age,  String deptName, String zhuyuanId,String chuangh ) {
//        try {
//            // step 1 创建reader
//            PdfReader reader = new PdfReader(srcPath);
//            // step 2 创建stamper
//            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destPath));
//            // step 3 获取源文件总页数
//            int n = reader.getNumberOfPages();
//            // step 4 遍历并创建页眉页脚
//
//            for (int i = 1; i <= n; i++) {
//                // 判断页眉样式
//                switch (headerMode) {
//                    case HEADER_MODE_NONE:
//                        break;
//                    case HEADER_MODE_NORMAL:
//
//                        getHeaderTable(patientName,sex,age,deptName,zhuyuanId,chuangh,request).writeSelectedRows(-12, -1, 34, 835,
//                            stamper.getOverContent(i));
//                        break;
//                    default:
//                }
//
//                // 判断页脚样式
//                switch (footerMode) {
//                    case FOOTER_MODE_NONE:
//                        break;
//                    case FOOTER_MODE_NORMAL:
//                        getFooterTable(i,request).writeSelectedRows(0, -1, 34, 30,
//                                stamper.getOverContent(i));
//                        break;
//                    case FOOTER_MODE_FULL:
//                        getFooterTable(i, n,request).writeSelectedRows(0, -1, 34, 30,
//                                stamper.getOverContent(i));
//                        break;
//                    default:
//                }
//            }
//            // step 5 关闭stamper
//            stamper.close();
//            // step 6 关闭reader
//            reader.close();
//        } catch (IOException e) {
//            e.printStackTrace();
//        } catch (DocumentException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 获取页眉
//     * @param patientName
//     * @param sex
//     * @param age
//     * @param deptName
//     * @param zhuyuanId
//     * @param chuangh
//     * @param request
//     * @return
//     */
//    public static PdfPTable getHeaderTable( String patientName,String sex,String age,String deptName,String zhuyuanId,String chuangh,HttpServletRequest request) {
//        PdfPTable table = new PdfPTable(6);
//        table.setTotalWidth(527);
//        table.setLockedWidth(true);
//
//        try {
//            table.setWidths(new int[] { 45,35,35,65,65,40});
//        } catch (DocumentException e) {
//            e.printStackTrace();
//        }
//        PdfPCell cell = null;
//
//        // 姓名
//        cell = new PdfPCell(new Phrase("姓名："+patientName, getChineseFontSum(request)));
//        cell.setPaddingTop(20);
//        //cell.setMinimumHeight(50);
//        cell.setBorder(Rectangle.BOTTOM);
//        table.addCell(cell);
//
//        // 性别
//        cell = new PdfPCell(new Phrase("性别："+sex, getChineseFontSum(request)));
//        cell.setPaddingTop(20);
//        cell.setBorder(Rectangle.BOTTOM);
//        table.addCell(cell);
//
//        //年龄
//        cell = new PdfPCell(new Phrase("年龄："+age+"岁", getChineseFontSum(request)));
//        cell.setPaddingTop(20);
//        cell.setBorder(Rectangle.BOTTOM);
//        table.addCell(cell);
//        //科室
//        cell = new PdfPCell(new Phrase("科室："+deptName, getChineseFontSum(request)));
//        cell.setPaddingTop(20);
//        cell.setBorder(Rectangle.BOTTOM);
//        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
//        table.addCell(cell);
//
//        //住院号
//        cell = new PdfPCell(new Phrase("住院号："+zhuyuanId, getChineseFontSum(request)));
//        cell.setPaddingTop(20);
//        cell.setBorder(Rectangle.BOTTOM);
//        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
//        table.addCell(cell);
//
//        //病床号
//        cell = new PdfPCell(new Phrase("病床号："+chuangh, getChineseFontSum(request)));
//        cell.setPaddingTop(20);
//        cell.setBorder(Rectangle.BOTTOM);
//        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
//        table.addCell(cell);
//        return table;
//    }
//
//    /**
//     * 获取页脚 第x页
//     *
//     * @param x
//     * @return
//     */
//    public static PdfPTable getFooterTable(int x,HttpServletRequest request) {
//        PdfPTable table = new PdfPTable(1);
//        table.setTotalWidth(527);
//        table.setLockedWidth(true);
//
//        PdfPCell cell = null;
//
//        cell = new PdfPCell(new Phrase("第" + x + "页", getChineseFont(request)));
//        cell.setBorder(Rectangle.TOP);
//        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//        table.addCell(cell);
//        return table;
//    }
//
//    /**
//     * 获取页脚 第x页，共y页
//     *
//     * @param x
//     * @param y
//     * @return
//     */
//    public static PdfPTable getFooterTable(int x, int y,HttpServletRequest request) {
//        PdfPTable table = new PdfPTable(1);
//        table.setTotalWidth(527);
//        table.setLockedWidth(true);
//
//        PdfPCell cell = null;
//
//        cell = new PdfPCell(new Phrase("第" + x + "页,共" + y + "页", getChineseFont(request)));
//        cell.setBorder(Rectangle.TOP);
//        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//        table.addCell(cell);
//        return table;
//    }
//
//    /**
//     * 获取中文字体 TODO
//     *
//     * @return
//     */
//    private static final Font getChineseFont(HttpServletRequest request) {
//        Font fontChinese = null;
//
//        try {
//           BaseFont bfChinese = BaseFont.createFont(getPrintFontPath(request) + File.separator +FONT_SIMHEI, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//            fontChinese = new Font(bfChinese, 12, Font.NORMAL);
//        } catch (DocumentException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return fontChinese;
//    }
//    /**
//     * 获取中文字体 宋体
//     *
//     * @return
//     */
//    private static final Font getChineseFontSum(HttpServletRequest request) {
//        Font fontChinese = null;
//
//        try {
//            BaseFont bfChinese = BaseFont.createFont(getPrintFontPath(request) + File.separator +FONT_SIMSUN, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//            //BaseFont bfChinese = BaseFont.createFont(getPrintFontPath(request) + File.separator + FONT_SIMHEI, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//            fontChinese = new Font(bfChinese, 10, Font.NORMAL);
//        } catch (DocumentException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return fontChinese;
//    }
//    /**
//     * 批量导出PDF
//     *
//     * @param userId
//     * @param urlList
//     * @param headerMode
//     * @param footerMode
//     * @param docTypeList
//     * @param docNumList
//     * @param patientName
//     * @param zhixingId
//     * @param hospitalName
//     * @param userDepartment
//     * @param bedNumber
//     * @param sex
//     * @return
//     */
//    public static List<String> exportPdfBatch(HttpServletRequest request,String userId, List<String> urlList, int headerMode, int footerMode, List<String> docTypeList, List<String> docNumList, String patientName, String zhixingId, String hospitalName, String userDepartment, String bedNumber, String sex) {
//        List<String> fileList = new ArrayList<String>();
//        for (int i = 0; i < urlList.size(); i++) {
//            String generateFilePath = exportPdf(request,userId, urlList.get(i), headerMode, footerMode, docTypeList.get(i), docNumList.get(i), patientName, zhixingId, hospitalName, userDepartment, bedNumber, sex);
//            fileList.add(generateFilePath);
//        }
//        return fileList;
//    }
//
//    /**
//     * 连接pdf
//     *
//     * @param userId
//     * @param zhixingId
//     * @param fileList
//     * @return
//     */
//    public static String concatenatePdf(HttpServletRequest request,String userId, String zhixingId, List<String> fileList) {
////        // 生成pdf路径（不带页脚）
////        String generateFilePath = getGenerateFilePath(userId, zhixingId, "批量_temp", null);
//        // 生成pdf路径
//        String generateFilePath = getGenerateFilePath(request,userId, zhixingId, "批量", null);
//        // step 1 创建Document
//        Document document = new Document();
//        try {
//            // step 2 创建PDFCopy
//            PdfCopy copy = new PdfCopy(document, new FileOutputStream(generateFilePath));
//            // step 3 打开document
//            document.open();
//            // step 4 创建PDFReader
//            PdfReader reader;
//            int n;
//            // step 5 遍历要连接的pdf
//            for (int i = 0; i < fileList.size(); i++) {
//                reader = new PdfReader(fileList.get(i));
//                // loop over the pages in that document
//                n = reader.getNumberOfPages();
//                for (int page = 0; page < n; ) {
//                    copy.addPage(copy.getImportedPage(reader, ++page));
//                }
//                reader.close();
//            }
//        } catch (DocumentException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        // step 6 关闭document
//        document.close();
//        return generateFilePath;
//    }
//
//    /**
//     * Test
//     */
//    public static void main(String[] args) throws Exception {
//        // 病历
//        exportPdf(null,"1", "http://localhost:8080/a/printEmr/test", HEADER_MODE_NORMAL, FOOTER_MODE_NORMAL, "门诊病历", null, "王立", "2015032402-1", null, null, null, null);
////        // 诊断
////        exportPdf("test", "http://localhost:8080/emr/doctor/zhenduan/print?zhixingId=2015032402-1&zhixingType=门诊", HEADER_MODE_NORMAL, FOOTER_MODE_NORMAL, "诊断", "王立", "2015032402-1", null, null, null, null);
////        // 处方
////        exportPdf("test", "http://localhost:8080/emr/doctor/chufang/print?chufangId=6", HEADER_MODE_NORMAL, FOOTER_MODE_NORMAL, "处方", "王立", "2015032402-1", null, null, null, null);
////        // lis
////        exportPdf("test", "http://localhost:8080/emr/doctor/lisReport/print?zhixingId=2015032402-1&jianchaInfoId=4", HEADER_MODE_NORMAL, FOOTER_MODE_NORMAL, "检验报告单", "王立", "2015032402-1", null, null, null, null);
////        // pacs
////        exportPdf("test", "http://localhost:8080/emr/doctor/pacsReport/print?zhixingId=2015032402-1&id=2", HEADER_MODE_NONE, FOOTER_MODE_NONE, "影像报告单", "王立", "2015032402-1", null, null, null, null);
//    }
//}
